Micron Document
`:top
`!Embedded SQL`! (`F33f`_`[englisch`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Englische_Sprache]`_`f für `*eingebettetes `F33f`_`[SQL`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=SQL]`_`f`*, abgekürzt `!ESQL`!) standardisiert die Syntax zum Einfügen von SQL Befehlen in Programmiersprachen. Die Einbettung in `F33f`_`[Ada`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Ada_(Programmiersprache)]`_`f, `F33f`_`[C`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=C_(Programmiersprache)]`_`f, `F33f`_`[C++`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=C++]`_`f, `F33f`_`[COBOL`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=COBOL]`_`f, `F33f`_`[Fortran`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Fortran]`_`f, `F33f`_`[MUMPS`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=MUMPS]`_`f, `F33f`_`[Pascal`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Pascal_(Programmiersprache)]`_`f und `F33f`_`[PL/I`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=PL/I]`_`f wird im Teil 2 `*Foundation`* (SQL/Foundation) und die Einbettung in `F33f`_`[Java`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Java_(Programmiersprache)]`_`f im Teil 10 `*Object Language Bindings`* (`F33f`_`[SQL/OLB`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=SQLJ]`_`f) des `F33f`_`[SQL Standards`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=SQL]`_`f `*ISO/IEC 9075`* spezifiziert.

>>Contents

• `F0af`_`[Technische Beschreibung`#technische-beschreibung]`_`f
• `F0af`_`[Syntax`#syntax]`_`f
• `F0af`_`[Programmierung`#programmierung]`_`f
• `F0af`_`[Siehe auch`#siehe-auch]`_`f
• `F0af`_`[Literatur`#literatur]`_`f
• `F0af`_`[Weblinks`#weblinks]`_`f

-─

>>Technische Beschreibung

ESQL Statements werden in die Abfolge der regulären Statements der Programmiersprache (= Hostsprache) eingefügt. Ein `F33f`_`[Precompiler`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Precompiler]`_`f wandelt die ESQL Statements in normalen Code der Hostsprache um, der dann mit dessen `F33f`_`[Compiler`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Compiler]`_`f übersetzt wird. (Einige COBOL-Compiler enthalten einen integrierten ESQL-Precompiler.) Der umgewandelte Code enthält Aufrufe der `F33f`_`[Schnittstelle`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Schnittstelle]`_`f zur `F33f`_`[Datenbank`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Datenbank]`_`f. Diese Schnittstelle muss als `F33f`_`[Bibliothek`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Programmbibliothek]`_`f in das fertige Programm `F33f`_`[gelinkt`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Linker_(Computerprogramm)]`_`f werden. Die Bibliothek ist abhängig von der verwendeten Datenbank und wird gewöhnlich vom jeweiligen Datenbankhersteller geliefert.

Da ESQL standardisiert ist, sollten Programme mit ESQL – solange keine `F33f`_`[proprietären`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Proprietär]`_`f Eigenschaften des jeweiligen SQL-Dialektes verwendet werden – kompatibel mit Datenbanken verschiedener Hersteller sein, allerdings nur auf Ebene des `F33f`_`[Quellcodes`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Quellcode]`_`f. Das heißt, dass bei Wechsel des Datenbankfabrikats, manchmal sogar beim Versionsupdate der gleichen Datenbank, der Quellcode durch den ESQL-Precompiler und Compiler neu übersetzt und gegen die aktuelle Bibliothek gelinkt werden muss. Dies unterscheidet ESQL von Konzepten mit ähnlichem Einsatzzweck wie `F33f`_`[ODBC`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=ODBC]`_`f oder `F33f`_`[JDBC`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=JDBC]`_`f, wo beim Wechsel der Datenbank (theoretisch) nur ein `F33f`_`[Treiber`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Gerätetreiber]`_`f ausgewechselt wird und das kompilierte Programm weiter verwendet werden kann. Es gibt allerdings mindestens einen COBOL-Compiler, der ESQL-Anweisungen in Aufrufe von ODBC umwandelt.

Der Vorteil dieses Ansatzes der Datenbankanbindung liegt darin, dass zur `F33f`_`[Compilezeit`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Compilezeit]`_`f nicht nur die SQL-`F33f`_`[Syntax`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Syntax]`_`f, sondern auch die Typverträglichkeit der Schnittstellenvariablen gegen die Datentypen des Datenbanksystems geprüft werden kann. Laufzeitgebundene Architekturen wie `F33f`_`[ODBC`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Open_Database_Connectivity]`_`f, `F33f`_`[JDBC`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=JDBC]`_`f, `F33f`_`[ADO`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=ActiveX_Data_Objects]`_`f oder `F33f`_`[ADO.NET`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=ADO.NET]`_`f können zu diesem Zeitpunkt keine Typprüfung vornehmen.

>>Syntax

ESQL Statements setzen sich zusammen aus:

`B100`F9d9EXEC SQL <sql-statement> <terminator> für Nicht-Java`f`b
`B100`F9d9#sql { <sql-statement> }; für Java`f`b
`B100`F9d9`f`b

z. B. COBOL:

`B100`F9d9EXEC SQL <sql-statement> END-EXEC.`f`b
`B100`F9d9`f`b

z. B. C, C++, Ada:

`B100`F9d9EXEC SQL <sql-statement>;`f`b
`B100`F9d9`f`b

>>Programmierung

Die Kommunikation zwischen SQL und dem Anwendungsprogramm erfolgt per Programmvariablen. Werden diese Programmvariablen in einem SQL-Ausdruck benutzt, so wird ihnen ein Doppelpunkt vorangestellt.

Beispiel:

`B100`F9d9EXEC SQL`f`b
`B100`F9d9SELECT vorname, nachname`f`b
`B100`F9d9INTO :vorname, :nachname`f`b
`B100`F9d9FROM mitarbeitertabelle`f`b
`B100`F9d9WHERE pnr = :pnr`f`b
`B100`F9d9;`f`b

Vor der Ausführung des SQL-Befehls muss in der umgebenden Programmiersprache die Variable 'pnr' mit einem Wert belegt werden. Nach Ausführung des SQL-Befehls sind die Variablen 'vorname' und 'nachname' mit Werten belegt – sofern überhaupt ein Satz gefunden wurde.

In einer Datenbank-Tabelle können Spalten mit `B100`F9d9Null`f`b-Werten definiert werden. Bei den meisten Programmiersprachen können Variablen nicht mit `B100`F9d9Null`f`b-Werten belegt werden, sondern eine Variable ist immer mit irgendeinem Wert belegt.

Wenn auf Tabellenspalten zugegriffen werden soll, die auch `B100`F9d9Null`f`b-Werte enthalten, dann müssen Indikatorvariablen verwendet werden. Sie müssen vom Typ `B100`F9d9int`f`b angelegt werden. Diese Variable wird auf einen Wert kleiner 0 gesetzt, falls die Spalte in der Datenbank `B100`F9d9Null`f`b enthält.

Beispiel:

`B100`F9d9EXEC SQL`f`b
`B100`F9d9SELECT vorname, nachname`f`b
`B100`F9d9INTO :vorname :i_vorname, :nachname :i_nachname`f`b
`B100`F9d9FROM mitarbeitertabelle`f`b
`B100`F9d9WHERE pnr = :pnr`f`b
`B100`F9d9;`f`b

Die Variablen 'vorname' und 'nachname' werden hier – wie auch im Beispiel oben – zur Aufnahme der gelesenen Werte verwendet. Zusätzlich geben die Indikatorvariablen 'i_vorname' und 'i_nachname' an, ob der Vorname und der Nachname überhaupt vorhanden war. Wenn z. B. nur der Nachname gespeichert war und der Vorname unbekannt (`B100`F9d9Null`f`b) war, dann wurde 'i_nachname' mit 0 und 'i_vorname' mit −1 belegt.

>>Siehe auch

• `F33f`_`[Pro*C`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Pro*C]`_`f

>>Literatur

• ISO 9075 Part 1: Framework. 2. Auflage. ISO/IEC, 2003 (web.archive.org [PDF; 582 kB; abgerufen am 24. August 2021] Referenznummer: 9075-1:2003(E), Abschnitte: 4.8.1, 5.3.3.1).
• ISO 9075 Part 2: Foundation. 2. Auflage. ISO/IEC, 2003 (web.archive.org [PDF; 139 kB; abgerufen am 24. August 2021] Referenznummer: 9075-2:2003(E), Kapitel: 20 Embedded SQL).
• ISO 9075 Part 3: Call-Level Interface. 3. Auflage. ISO/IEC, 2003 (Referenznummer: 9075-3:2003(E), Anhang B.1 (Übersetzungsbeispiele von Embedded SQL nach low-level Library Function Calls)).

>>Weblinks

• ECPG – Embedded SQL in C. PostgreSQL Documentation, (Beschreibung der `F33f`_`[PostgreSQL`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=PostgreSQL]`_`f Implementation von Embedded SQL).

`c`F0af`_`[↑ Back to top`#top]`_`f`a